﻿import gs.dataTransfer.XMLParser;
import clases.dades.menu.*;
import clases.dades.Idioma;

/**
 * Carrega i parseja l'XML del menú
 * 
 * @author JDo
 * @version 1.0
 */
class clases.dades.xml.XMLMenu extends MovieClip{
	private var _resultados:String;
	
	private var _menuCatala  :Menu;
	private var _menuCastella:Menu;
	private var _menuAngles  :Menu;
	
	private var _onCarregat  :Function;
	private var _base        :MovieClip;
	
	/**
	 * Constructor
	 * 
	 * @param $xml        XML a carregar i parsejar
	 * @param $onCarregat Funció a cridar quan s'acaba tot el proces
	 * @param $base       MC origen de la crida a la classe
	 */
	public function XMLMenu($xml:String,$onCarregat:Function,$base:MovieClip){
		_onCarregat = $onCarregat;
		_base       = $base;
		XMLParser.load($xml, xmlCarregat, this);
	}
	
	/**
	 * Carrega de l'XML completa
	 * 
	 * @param $ok        Ens diu si s'ha pogut carregar i parsejar l'XML
	 * @param $resultats Resultat del parseig
	 * @param $xml       XML que s'ha carregat
	 * @param $base      Origen de la crida del parsejador
	 */
	private function xmlCarregat($ok:Boolean, $resultats:Object, $xml:XML, $base:MovieClip):Void {
		$xml = null;
		if ($ok) {
			$base.parsejaResultats($resultats); 
		}
	}
	
	/**
	 * Parsseig de l'XML
	 * 
	 * @param $resultado Resultat del parser per tractar-lo 
	 */
	private function parsejaResultats($resultado:Object):Void{
		_menuCatala   = new Menu();
		_menuCastella = new Menu();
		_menuAngles   = new Menu();
		
		for(var ap:Number=0;ap<$resultado.apartat.length;ap++){
			if($resultado.apartat[ap].catala){
				var apartat:Apartat = new Apartat($resultado.apartat[ap].id,
												  $resultado.apartat[ap].catala[0].value);
				
				if($resultado.apartat[ap].subapartats){
					for(var sub:Number=0;sub<$resultado.apartat[ap].subapartats[0].subapartat.length;sub++){
						if($resultado.apartat[ap].subapartats[0].subapartat[sub].catala){
							apartat.addSubApartat(new SubApartat($resultado.apartat[ap].subapartats[0].subapartat[sub].id,
													             $resultado.apartat[ap].subapartats[0].subapartat[sub].catala[0].value));
						}
					}
				}
				
				_menuCatala.addApartat(apartat);
			}
			
			if($resultado.apartat[ap].castella){
				var apartat:Apartat = new Apartat($resultado.apartat[ap].id,
												  $resultado.apartat[ap].castella[0].value);
				
				if($resultado.apartat[ap].subapartats){
					for(var sub:Number=0;sub<$resultado.apartat[ap].subapartats[0].subapartat.length;sub++){
						if($resultado.apartat[ap].subapartats[0].subapartat[sub].castella){
							apartat.addSubApartat(new SubApartat($resultado.apartat[ap].subapartats[0].subapartat[sub].id,
													             $resultado.apartat[ap].subapartats[0].subapartat[sub].castella[0].value));
						}
					}
				}
				
				_menuCastella.addApartat(apartat);
			}
			
			if($resultado.apartat[ap].angles){
				var apartat:Apartat = new Apartat($resultado.apartat[ap].id,
												  $resultado.apartat[ap].angles[0].value);
				
				if($resultado.apartat[ap].subapartats){
					for(var sub:Number=0;sub<$resultado.apartat[ap].subapartats[0].subapartat.length;sub++){
						if($resultado.apartat[ap].subapartats[0].subapartat[sub].angles){
							apartat.addSubApartat(new SubApartat($resultado.apartat[ap].subapartats[0].subapartat[sub].id,
													             $resultado.apartat[ap].subapartats[0].subapartat[sub].angles[0].value));
						}
					}
				}
				
				_menuAngles.addApartat(apartat);
			}
		}
		
		if($resultado.peu){
			if($resultado.peu[0].contacte){
				_menuCatala.setContacte($resultado.peu[0].contacte[0].catala[0].value,
										$resultado.peu[0].contacte[0].contingut[0].value);
				
				_menuCastella.setContacte($resultado.peu[0].contacte[0].castella[0].value,
										  $resultado.peu[0].contacte[0].contingut[0].value);
				
				_menuAngles.setContacte($resultado.peu[0].contacte[0].angles[0].value,
										$resultado.peu[0].contacte[0].contingut[0].value);
			}
			
			if($resultado.peu[0].telefon){
				_menuCatala.setTelefon($resultado.peu[0].telefon[0].catala[0].value,
									   $resultado.peu[0].telefon[0].contingut[0].value);
				
				_menuCastella.setTelefon($resultado.peu[0].telefon[0].castella[0].value,
										 $resultado.peu[0].telefon[0].contingut[0].value);
				
				_menuAngles.setTelefon($resultado.peu[0].telefon[0].angles[0].value,
									   $resultado.peu[0].telefon[0].contingut[0].value);
			}
			
			if($resultado.peu[0].localitzacio){
				_menuCatala.setLocalitzacio($resultado.peu[0].localitzacio[0].catala[0].value);
				_menuCastella.setLocalitzacio($resultado.peu[0].localitzacio[0].castella[0].value);
				_menuAngles.setLocalitzacio($resultado.peu[0].localitzacio[0].angles[0].value);
			}
		}
		
		_onCarregat(_base);
	}
	
	/**
	 * Ens dona les dades del idioma corresponent
	 * 
	 * @param $id Identificador del idioma a retornar
	 * @return Menu
	 * @see clases.dades.menu.Menu
	 */
	public function getIdioma($id:Number):Menu{
		switch($id){
			case Idioma.CATALA:
				return _menuCatala;
			break;
			
			case Idioma.CASTELLA:
				return _menuCastella;
			break;
			
			case Idioma.ANGLES:
				return _menuAngles;
			break;
		}
	}
}